home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2000 March / maximum-cd-2000-03.iso / Quake3 Game Source / Q3AGameSource.exe / Main / ui_spskill.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-18  |  10.4 KB  |  310 lines

  1. // Copyright (C) 1999-2000 Id Software, Inc.
  2. //
  3. /*
  4. =============================================================================
  5.  
  6. SINGLE PLAYER SKILL MENU
  7.  
  8. =============================================================================
  9. */
  10.  
  11. #include "ui_local.h"
  12.  
  13.  
  14. #define ART_FRAME                    "menu/art/cut_frame"
  15. #define ART_BACK                    "menu/art/back_0.tga"
  16. #define ART_BACK_FOCUS                "menu/art/back_1.tga"
  17. #define ART_FIGHT                    "menu/art/fight_0"
  18. #define ART_FIGHT_FOCUS                "menu/art/fight_1"
  19. #define ART_MAP_COMPLETE1            "menu/art/level_complete1"
  20. #define ART_MAP_COMPLETE2            "menu/art/level_complete2"
  21. #define ART_MAP_COMPLETE3            "menu/art/level_complete3"
  22. #define ART_MAP_COMPLETE4            "menu/art/level_complete4"
  23. #define ART_MAP_COMPLETE5            "menu/art/level_complete5"
  24.  
  25. #define ID_BABY                        10
  26. #define ID_EASY                        11
  27. #define ID_MEDIUM                    12
  28. #define ID_HARD                        13
  29. #define ID_NIGHTMARE                14
  30. #define ID_BACK                        15
  31. #define ID_FIGHT                    16
  32.  
  33.  
  34. typedef struct {
  35.     menuframework_s    menu;
  36.  
  37.     menubitmap_s    art_frame;
  38.     menutext_s        art_banner;
  39.  
  40.     menutext_s        item_baby;
  41.     menutext_s        item_easy;
  42.     menutext_s        item_medium;
  43.     menutext_s        item_hard;
  44.     menutext_s        item_nightmare;
  45.  
  46.     menubitmap_s    art_skillPic;
  47.     menubitmap_s    item_back;
  48.     menubitmap_s    item_fight;
  49.  
  50.     const char        *arenaInfo;
  51.     qhandle_t        skillpics[5];
  52.     sfxHandle_t        nightmareSound;
  53.     sfxHandle_t        silenceSound;
  54. } skillMenuInfo_t;
  55.  
  56. static skillMenuInfo_t    skillMenuInfo;
  57.  
  58.  
  59. static void SetSkillColor( int skill, vec4_t color ) {
  60.     switch( skill ) {
  61.     case 1:
  62.         skillMenuInfo.item_baby.color = color;
  63.         break;
  64.     case 2:
  65.         skillMenuInfo.item_easy.color = color;
  66.         break;
  67.     case 3:
  68.         skillMenuInfo.item_medium.color = color;
  69.         break;
  70.     case 4:
  71.         skillMenuInfo.item_hard.color = color;
  72.         break;
  73.     case 5:
  74.         skillMenuInfo.item_nightmare.color = color;
  75.         break;
  76.     default:
  77.         break;
  78.     }
  79. }
  80.  
  81.  
  82. /*
  83. =================
  84. UI_SPSkillMenu_SkillEvent
  85. =================
  86. */
  87. static void UI_SPSkillMenu_SkillEvent( void *ptr, int notification ) {
  88.     int        id;
  89.     int        skill;
  90.  
  91.     if (notification != QM_ACTIVATED)
  92.         return;
  93.  
  94.     SetSkillColor( (int)trap_Cvar_VariableValue( "g_spSkill" ), color_red );
  95.  
  96.     id = ((menucommon_s*)ptr)->id;
  97.     skill = id - ID_BABY + 1;
  98.     trap_Cvar_SetValue( "g_spSkill", skill );
  99.  
  100.     SetSkillColor( skill, color_white );
  101.     skillMenuInfo.art_skillPic.shader = skillMenuInfo.skillpics[skill - 1];
  102.  
  103.     if( id == ID_NIGHTMARE ) {
  104.         trap_S_StartLocalSound( skillMenuInfo.nightmareSound, CHAN_ANNOUNCER );
  105.     }
  106.     else {
  107.         trap_S_StartLocalSound( skillMenuInfo.silenceSound, CHAN_ANNOUNCER );
  108.     }
  109. }
  110.  
  111.  
  112. /*
  113. =================
  114. UI_SPSkillMenu_FightEvent
  115. =================
  116. */
  117. static void UI_SPSkillMenu_FightEvent( void *ptr, int notification ) {
  118.     if (notification != QM_ACTIVATED)
  119.         return;
  120.  
  121.     UI_SPArena_Start( skillMenuInfo.arenaInfo );
  122. }
  123.  
  124.  
  125. /*
  126. =================
  127. UI_SPSkillMenu_BackEvent
  128. =================
  129. */
  130. static void UI_SPSkillMenu_BackEvent( void* ptr, int notification ) {
  131.     if (notification != QM_ACTIVATED) {
  132.         return;
  133.     }
  134.  
  135.     trap_S_StartLocalSound( skillMenuInfo.silenceSound, CHAN_ANNOUNCER );
  136.     UI_PopMenu();
  137. }
  138.  
  139.  
  140. /*
  141. =================
  142. UI_SPSkillMenu_Key
  143. =================
  144. */
  145. static sfxHandle_t UI_SPSkillMenu_Key( int key ) {
  146.     if( key == K_MOUSE2 || key == K_ESCAPE ) {
  147.         trap_S_StartLocalSound( skillMenuInfo.silenceSound, CHAN_ANNOUNCER );
  148.     }
  149.     return Menu_DefaultKey( &skillMenuInfo.menu, key );
  150. }
  151.  
  152.  
  153. /*
  154. =================
  155. UI_SPSkillMenu_Cache
  156. =================
  157. */
  158. void UI_SPSkillMenu_Cache( void ) {
  159.     trap_R_RegisterShaderNoMip( ART_FRAME );
  160.     trap_R_RegisterShaderNoMip( ART_BACK );
  161.     trap_R_RegisterShaderNoMip( ART_BACK_FOCUS );
  162.     trap_R_RegisterShaderNoMip( ART_FIGHT );
  163.     trap_R_RegisterShaderNoMip( ART_FIGHT_FOCUS );
  164.     skillMenuInfo.skillpics[0] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE1 );
  165.     skillMenuInfo.skillpics[1] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE2 );
  166.     skillMenuInfo.skillpics[2] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE3 );
  167.     skillMenuInfo.skillpics[3] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE4 );
  168.     skillMenuInfo.skillpics[4] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE5 );
  169.  
  170.     skillMenuInfo.nightmareSound = trap_S_RegisterSound( "sound/misc/nightmare.wav" );
  171.     skillMenuInfo.silenceSound = trap_S_RegisterSound( "sound/misc/silence.wav" );
  172. }
  173.  
  174.  
  175. /*
  176. =================
  177. UI_SPSkillMenu_Init
  178. =================
  179. */
  180. static void UI_SPSkillMenu_Init( void ) {
  181.     int        skill;
  182.  
  183.     memset( &skillMenuInfo, 0, sizeof(skillMenuInfo) );
  184.     skillMenuInfo.menu.fullscreen = qtrue;
  185.     skillMenuInfo.menu.key = UI_SPSkillMenu_Key;
  186.  
  187.     UI_SPSkillMenu_Cache();
  188.  
  189.     skillMenuInfo.art_frame.generic.type        = MTYPE_BITMAP;
  190.     skillMenuInfo.art_frame.generic.name        = ART_FRAME;
  191.     skillMenuInfo.art_frame.generic.flags        = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
  192.     skillMenuInfo.art_frame.generic.x            = 142;
  193.     skillMenuInfo.art_frame.generic.y            = 118;
  194.     skillMenuInfo.art_frame.width                = 359;
  195.     skillMenuInfo.art_frame.height                = 256;
  196.  
  197.     skillMenuInfo.art_banner.generic.type        = MTYPE_BTEXT;
  198.     skillMenuInfo.art_banner.generic.flags        = QMF_CENTER_JUSTIFY;
  199.     skillMenuInfo.art_banner.generic.x            = 320;
  200.     skillMenuInfo.art_banner.generic.y            = 16;
  201.     skillMenuInfo.art_banner.string                = "DIFFICULTY";
  202.     skillMenuInfo.art_banner.color                = color_white;
  203.     skillMenuInfo.art_banner.style                = UI_CENTER;
  204.  
  205.     skillMenuInfo.item_baby.generic.type        = MTYPE_PTEXT;
  206.     skillMenuInfo.item_baby.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  207.     skillMenuInfo.item_baby.generic.x            = 320;
  208.     skillMenuInfo.item_baby.generic.y            = 170;
  209.     skillMenuInfo.item_baby.generic.callback    = UI_SPSkillMenu_SkillEvent;
  210.     skillMenuInfo.item_baby.generic.id            = ID_BABY;
  211.     skillMenuInfo.item_baby.string                = "I Can Win";
  212.     skillMenuInfo.item_baby.color                = color_red;
  213.     skillMenuInfo.item_baby.style                = UI_CENTER;
  214.  
  215.     skillMenuInfo.item_easy.generic.type        = MTYPE_PTEXT;
  216.     skillMenuInfo.item_easy.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  217.     skillMenuInfo.item_easy.generic.x            = 320;
  218.     skillMenuInfo.item_easy.generic.y            = 198;
  219.     skillMenuInfo.item_easy.generic.callback    = UI_SPSkillMenu_SkillEvent;
  220.     skillMenuInfo.item_easy.generic.id            = ID_EASY;
  221.     skillMenuInfo.item_easy.string                = "Bring It On";
  222.     skillMenuInfo.item_easy.color                = color_red;
  223.     skillMenuInfo.item_easy.style                = UI_CENTER;
  224.  
  225.     skillMenuInfo.item_medium.generic.type        = MTYPE_PTEXT;
  226.     skillMenuInfo.item_medium.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  227.     skillMenuInfo.item_medium.generic.x            = 320;
  228.     skillMenuInfo.item_medium.generic.y            = 227;
  229.     skillMenuInfo.item_medium.generic.callback    = UI_SPSkillMenu_SkillEvent;
  230.     skillMenuInfo.item_medium.generic.id        = ID_MEDIUM;
  231.     skillMenuInfo.item_medium.string            = "Hurt Me Plenty";
  232.     skillMenuInfo.item_medium.color                = color_red;
  233.     skillMenuInfo.item_medium.style                = UI_CENTER;
  234.  
  235.     skillMenuInfo.item_hard.generic.type        = MTYPE_PTEXT;
  236.     skillMenuInfo.item_hard.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  237.     skillMenuInfo.item_hard.generic.x            = 320;
  238.     skillMenuInfo.item_hard.generic.y            = 255;
  239.     skillMenuInfo.item_hard.generic.callback    = UI_SPSkillMenu_SkillEvent;
  240.     skillMenuInfo.item_hard.generic.id            = ID_HARD;
  241.     skillMenuInfo.item_hard.string                = "Hardcore";
  242.     skillMenuInfo.item_hard.color                = color_red;
  243.     skillMenuInfo.item_hard.style                = UI_CENTER;
  244.  
  245.     skillMenuInfo.item_nightmare.generic.type        = MTYPE_PTEXT;
  246.     skillMenuInfo.item_nightmare.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  247.     skillMenuInfo.item_nightmare.generic.x            = 320;
  248.     skillMenuInfo.item_nightmare.generic.y            = 283;
  249.     skillMenuInfo.item_nightmare.generic.callback    = UI_SPSkillMenu_SkillEvent;
  250.     skillMenuInfo.item_nightmare.generic.id            = ID_NIGHTMARE;
  251.     skillMenuInfo.item_nightmare.string                = "NIGHTMARE!";
  252.     skillMenuInfo.item_nightmare.color                = color_red;
  253.     skillMenuInfo.item_nightmare.style                = UI_CENTER;
  254.  
  255.     skillMenuInfo.item_back.generic.type        = MTYPE_BITMAP;
  256.     skillMenuInfo.item_back.generic.name        = ART_BACK;
  257.     skillMenuInfo.item_back.generic.flags        = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
  258.     skillMenuInfo.item_back.generic.x            = 0;
  259.     skillMenuInfo.item_back.generic.y            = 480-64;
  260.     skillMenuInfo.item_back.generic.callback    = UI_SPSkillMenu_BackEvent;
  261.     skillMenuInfo.item_back.generic.id            = ID_BACK;
  262.     skillMenuInfo.item_back.width                = 128;
  263.     skillMenuInfo.item_back.height                = 64;
  264.     skillMenuInfo.item_back.focuspic            = ART_BACK_FOCUS;
  265.  
  266.     skillMenuInfo.art_skillPic.generic.type        = MTYPE_BITMAP;
  267.     skillMenuInfo.art_skillPic.generic.flags    = QMF_LEFT_JUSTIFY|QMF_INACTIVE;
  268.     skillMenuInfo.art_skillPic.generic.x        = 320-64;
  269.     skillMenuInfo.art_skillPic.generic.y        = 368;
  270.     skillMenuInfo.art_skillPic.width            = 128;
  271.     skillMenuInfo.art_skillPic.height            = 96;
  272.  
  273.     skillMenuInfo.item_fight.generic.type        = MTYPE_BITMAP;
  274.     skillMenuInfo.item_fight.generic.name        = ART_FIGHT;
  275.     skillMenuInfo.item_fight.generic.flags        = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
  276.     skillMenuInfo.item_fight.generic.callback    = UI_SPSkillMenu_FightEvent;
  277.     skillMenuInfo.item_fight.generic.id            = ID_FIGHT;
  278.     skillMenuInfo.item_fight.generic.x            = 640;
  279.     skillMenuInfo.item_fight.generic.y            = 480-64;
  280.     skillMenuInfo.item_fight.width                = 128;
  281.     skillMenuInfo.item_fight.height                = 64;
  282.     skillMenuInfo.item_fight.focuspic            = ART_FIGHT_FOCUS;
  283.  
  284.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.art_frame );
  285.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.art_banner );
  286.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_baby );
  287.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_easy );
  288.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_medium );
  289.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_hard );
  290.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_nightmare );
  291.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.art_skillPic );
  292.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_back );
  293.     Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_fight );
  294.  
  295.     skill = (int)Com_Clamp( 1, 5, trap_Cvar_VariableValue( "g_spSkill" ) );
  296.     SetSkillColor( skill, color_white );
  297.     skillMenuInfo.art_skillPic.shader = skillMenuInfo.skillpics[skill - 1];
  298.     if( skill == 5 ) {
  299.         trap_S_StartLocalSound( skillMenuInfo.nightmareSound, CHAN_ANNOUNCER );
  300.     }
  301. }
  302.  
  303.  
  304. void UI_SPSkillMenu( const char *arenaInfo ) {
  305.     UI_SPSkillMenu_Init();
  306.     skillMenuInfo.arenaInfo = arenaInfo;
  307.     UI_PushMenu( &skillMenuInfo.menu );
  308.     Menu_SetCursorToItem( &skillMenuInfo.menu, &skillMenuInfo.item_fight );
  309. }
  310.